﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Autocentro.Entities;
using Autocentro.BussinesLogic;
using Microsoft.Practices.Unity;

namespace Autocentro.UI
{
    public partial class FrmServicioProgramado : Form
    {

        [Dependency]
        public IEmpresaBL empresabl { get; set; }

        [Dependency]
        public ITipoVehiculoBL tipovehiculobl { get; set; }

        [Dependency]
        public IServicioProgramadoBL servicioprogramadobl { get; set; }

        [Dependency]
        public IProductoTipoVehiculoBL productotipovehiculobl { get; set; }

        [Dependency]
        public ICarteraServicioProgramadoBL carteraserviciobl { get; set; }

        public FrmServicioProgramado()
        {
            InitializeComponent();
            this.BuildUp();
        }

        private void CargarData()
        {
            eMPRESABindingSource.DataSource = empresabl.GetAllFromEmpresa();
            //pRODUCTOBindingSource.DataSource = productobl.GetAllFromPrductos();
            var _empresa = eMPRESABindingSource.Current as EMPRESA;
            tIPO_VEHICULOBindingSource.DataSource = tipovehiculobl.GetAllFromTipoVehiculoByEmpresaId(_empresa.Id);
        }

        private void FrmServicioProgramado_Load(object sender, EventArgs e)
        {
            CargarData();     
        }


        private void BtnAgregar_Click(object sender, EventArgs e)
        {
            var _empresa = eMPRESABindingSource.Current as EMPRESA;
            var _tipovehiculo = tIPO_VEHICULOBindingSource.Current as TIPO_VEHICULO;
            var _servicio = sERVICIOPROGRAMADOBindingSource.Current as SERVICIO_PROGRAMADO; 

            var _productotipovehiculo = pRODUCTO_TIPO_VEHICULOBindingSource1.Current as PRODUCTO_TIPO_VEHICULO;
          

            if (_servicio != null)
            {
                var _carteraservicio = new CARTERASERVICIOPROGRAMADO()
                {
                    IdServicioProgramado = _servicio.Id,
                    IdProductoTipoVehiculo = _productotipovehiculo.Id,
                    PRODUCTO_TIPO_VEHICULO = _productotipovehiculo,
                    Cantidad = 1

                };

                var existe = _servicio.CARTERASERVICIOPROGRAMADO.Where(dv => dv.PRODUCTO_TIPO_VEHICULO.Id.Equals(_productotipovehiculo.Id)).SingleOrDefault();

                if (existe == null)
                {
                    _servicio.CARTERASERVICIOPROGRAMADO.Add(_carteraservicio);

                    foreach (var item in _empresa.TIPO_VEHICULO)
                    {
                        foreach (var item2 in item.SERVICIO_PROGRAMADO)
                        {
                            if (item2.Id == _carteraservicio.IdServicioProgramado)
                            {
                                item2.CARTERASERVICIOPROGRAMADO.Add(_carteraservicio);
                            }
                        }
                        //if (item.Id == _tipovehiculo.Id)
                        //{
                        //    item.PRODUCTO_TIPO_VEHICULO.Add(_productotipovehiculo);
                        //}
                    }

                    sERVICIOPROGRAMADOBindingSource.ResetBindings(true);
                }
                else
                {
                    var rpt = MessageBox.Show(this, string.Format("El Item ya se encuentra activo"),
                                      "Mensaje", MessageBoxButtons.OK);
                }

               
             
            }
            else
            {
                MessageBox.Show(this, string.Format("Debe seleccionar un servicio para asignar producto"),
                                                     "Mensaje", MessageBoxButtons.OK);
            }
        }

        private void BtnQuitar_Click(object sender, EventArgs e)
        {
            var _empresa = eMPRESABindingSource.Current as EMPRESA;
            var _tipovehiculo = tIPO_VEHICULOBindingSource.Current as TIPO_VEHICULO;
            var _servicio = sERVICIOPROGRAMADOBindingSource.Current as SERVICIO_PROGRAMADO;
            var _cartera = cARTERASERVICIOPROGRAMADOBindingSource.Current as CARTERASERVICIOPROGRAMADO;

            if (_cartera != null)
            {
                if (_cartera.Id == 0)
                {
                    _servicio.CARTERASERVICIOPROGRAMADO.Remove(_cartera);
                    //    foreach (var item in _empresa.TIPO_VEHICULO)
                    //    {
                    //        if (item.Id == _tipovehiculo.Id)
                    //        {
                    //            item.PRODUCTO_TIPO_VEHICULO.Remove(_productotipovehiculo);

                    //        }
                    //    }
                    foreach (var item in _empresa.TIPO_VEHICULO)
                    {
                        foreach (var item2 in item.SERVICIO_PROGRAMADO)
                        {
                            if (item2.Id == _cartera.IdServicioProgramado)
                            {
                                item2.CARTERASERVICIOPROGRAMADO.Remove(_cartera);
                            }
                        }
                        //if (item.Id == _tipovehiculo.Id)
                        //{
                        //    item.PRODUCTO_TIPO_VEHICULO.Add(_productotipovehiculo);
                        //}
                    }

                            
                }
                else
                {
                    var rpta = MessageBox.Show("Este item ya se encuentra guardado, ¿Seguro que desea Eliminarlo?", "Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Information);

                    if (rpta == DialogResult.Yes)
                    {
                        _servicio.CARTERASERVICIOPROGRAMADO.Remove(_cartera);

                        //foreach (var item in _empresa.TIPO_VEHICULO)
                        //{
                        //    if (item.Id == _tipovehiculo.Id)
                        //    {
                        //        item.PRODUCTO_TIPO_VEHICULO.Remove(_productotipovehiculo);

                        //    }
                        //}
                        //    }
                        foreach (var item in _empresa.TIPO_VEHICULO)
                        {
                            foreach (var item2 in item.SERVICIO_PROGRAMADO)
                            {
                                if (item2.Id == _cartera.IdServicioProgramado)
                                {
                                    item2.CARTERASERVICIOPROGRAMADO.Remove(_cartera);
                                }
                            }
                            //if (item.Id == _tipovehiculo.Id)
                            //{
                            //    item.PRODUCTO_TIPO_VEHICULO.Add(_productotipovehiculo);
                            //}
                        }
                        carteraserviciobl.RemoveCarteraServicioProgramado(_cartera.Id);
                        sERVICIOPROGRAMADOBindingSource.ResetBindings(true);

                    }
                }

                sERVICIOPROGRAMADOBindingSource.ResetBindings(true);
                tIPO_VEHICULOBindingSource.ResetBindings(true);

            }
            else
            {
                MessageBox.Show(this, string.Format("Debe seleccionar un producto de la cartera de precios"),
                                                "Mensaje", MessageBoxButtons.OK);
            }
        }


        private void btnNuevo_Click(object sender, EventArgs e)
        {
            var frm = new FrmMttoEmpresa();
            frm.Nuevo();
            frm.ShowDialog();
            CargarData();
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            var _empresa = eMPRESABindingSource.Current as EMPRESA;
            if (_empresa != null)
            {
                var frm = new FrmMttoEmpresa();
                frm.CurrentEmpresa = _empresa;
                frm.Editar();
                frm.ShowDialog();
                CargarData();
            }
            else
            {
                MessageBox.Show("Debe de seleccionar item");
            }
        }

        private void BtnNuevoTVehiculo_Click(object sender, EventArgs e)
        {
            var frm = new FrmMttoTipoVehiculo();
            frm.Nuevo();
            frm.ShowDialog();
            CargarData();
        }

        private void BtnEditarTVehiculo_Click(object sender, EventArgs e)
        {
            var _tipovehiculo = tIPO_VEHICULOBindingSource.Current as TIPO_VEHICULO;
            if (_tipovehiculo != null)
            {
                var frm = new FrmMttoTipoVehiculo();
                frm.CurrentTipoVehiculo = _tipovehiculo;
                frm.Editar();
                frm.ShowDialog();
                CargarData();
            }
            else
            {
                MessageBox.Show("Debe de seleccionar item");
            }
        }

        private void eMPRESABindingSource_CurrentChanged(object sender, EventArgs e)
        {
            var _empresa = eMPRESABindingSource.Current as EMPRESA;
            var _tipovehiculo = tIPO_VEHICULOBindingSource.Current as TIPO_VEHICULO;
            //pRODUCTO_EMPRESABindingSource.DataSource = _empresa.PRODUCTO_EMPRESA;
            //pRODUCTO_EMPRESABindingSource.DataSource = productoempresabl.GetAllFromProductoEmpresaByEmpresaId(_empresa.Id);
            tIPO_VEHICULOBindingSource.DataSource = tipovehiculobl.GetAllFromTipoVehiculoByEmpresaId(_empresa.Id);
            if (tIPO_VEHICULOBindingSource.List.Count == 0)
            {
                sERVICIOPROGRAMADOBindingSource.DataSource = null;
            }
                
            
            //pRODUCTO_TIPO_VEHICULOBindingSource.ResetBindings(true);
            //var _tipovehiculo = tIPO_VEHICULOBindingSource.Current as TIPO_VEHICULO;
            //if (_tipovehiculo != null)
            //{
            //    pRODUCTO_TIPO_VEHICULOBindingSource.DataSource = productotipovehiculobl.GetAllFromProductoTipoVehiculoByTipoVehiculo(_tipovehiculo.Id);    
            //}
            
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            eMPRESABindingSource.DataSource = empresabl.GetFromEmpresaByDescripcion(txtCriterio.Text);
        }

        private void BtnBuscarTVehiculo_Click(object sender, EventArgs e)
        {
            var _empresa = eMPRESABindingSource.Current as EMPRESA;

            if (_empresa != null)
            {
                tIPO_VEHICULOBindingSource.DataSource = tipovehiculobl.GetFromTipoVehiculoByDescripcionAndEmpresaId(TxtTipoVehiculo.Text, _empresa.Id);
            }
        }

        private void tIPO_VEHICULOBindingSource_CurrentChanged(object sender, EventArgs e)
        {
            var _tipovehiculo = tIPO_VEHICULOBindingSource.Current as TIPO_VEHICULO;
            if (_tipovehiculo != null)
            {
                _tipovehiculo.PRODUCTO_TIPO_VEHICULO = productotipovehiculobl.GetAllFromProductoTipoVehiculoByTipoVehiculo(_tipovehiculo.Id);
                sERVICIOPROGRAMADOBindingSource.DataSource = servicioprogramadobl.GetAllFromServicioProgramadoByIdTipoVehiculo(_tipovehiculo.Id);
                pRODUCTO_TIPO_VEHICULOBindingSource1.DataSource = _tipovehiculo.PRODUCTO_TIPO_VEHICULO;
               
            }
        }

        private void BtnNuevoServicio_Click(object sender, EventArgs e)
        {
            var frm = new FrmMttoServicioProgramado();
            frm.Nuevo();
            frm.ShowDialog();
            CargarData();
        }

        private void BtnEditarServicio_Click(object sender, EventArgs e)
        {
            var _servicio = sERVICIOPROGRAMADOBindingSource.Current as SERVICIO_PROGRAMADO;

            if (_servicio != null)
            {
                var frm = new FrmMttoServicioProgramado();
                frm.CurrentServicioProgramado = _servicio;
                frm.Editar();
                frm.ShowDialog();
                CargarData();

            }
        }

        private void BtnBuscarServicio_Click(object sender, EventArgs e)
        {
            var _tipovehiculo = tIPO_VEHICULOBindingSource.Current as TIPO_VEHICULO;

            if (_tipovehiculo != null)
            {
                sERVICIOPROGRAMADOBindingSource.DataSource = servicioprogramadobl.GetFromServicioProgramadoByIdTipoVehiculoAndDescripcion(_tipovehiculo.Id,TxtCriterioServicios.Text);
            }
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            var _empresa = eMPRESABindingSource.List;
            var _tipovehiculo = tIPO_VEHICULOBindingSource.List;
            var msg = "ERROR";

            if (_empresa != null)
            {
                foreach (EMPRESA empresa in _empresa)
                {
                    foreach (var tipovehiculo in empresa.TIPO_VEHICULO)
                    {
                        foreach (var servicioprogramado in tipovehiculo.SERVICIO_PROGRAMADO)
                        {
                            foreach (var item in servicioprogramado.CARTERASERVICIOPROGRAMADO)
                            {
                                if (item.Id == 0)
                                {
                                    try
                                    {
                                        carteraserviciobl.AddCarteraServicioProgramado(item);
                                        RecoveryEntities(item);
                                    }
                                    catch (Exception ex)
                                    {
                                        msg = ex.Message;
                                        MessageBox.Show(msg, "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    }
                                }
                                else
                                {
                                    try
                                    {
                                        carteraserviciobl.UpdateCarteraServicioProgramado(item);
                                        RecoveryEntities(item);
                                    }
                                    catch (Exception ex)
                                    {
                                        msg = ex.Message;
                                        MessageBox.Show(msg, "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    }
                                }


                            }

                        }
                    }
                }
            }
            MessageBox.Show("Registro Correcto", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void RecoveryEntities(CARTERASERVICIOPROGRAMADO item)
        {
            item.PRODUCTO_TIPO_VEHICULO = productotipovehiculobl.GetFromProductoTipoVehiculoById(item.Id);
            item.SERVICIO_PROGRAMADO = servicioprogramadobl.GetFromServicioProgramadoById(item.IdServicioProgramado);
        }

        private void BtnBuscarCartera_Click(object sender, EventArgs e)
         {
            var _tipovehiculo = tIPO_VEHICULOBindingSource.Current as TIPO_VEHICULO;
            if (_tipovehiculo != null)
	        {
                if (TxtCriterioCartera.Text != string.Empty)
                {
                    var existe = _tipovehiculo.PRODUCTO_TIPO_VEHICULO.Where(dv => dv.PRODUCTO.Descripcion.ToUpper().Contains(TxtCriterioCartera.Text.ToUpper())).ToList();
                   pRODUCTO_TIPO_VEHICULOBindingSource1.DataSource = existe;
                   pRODUCTO_TIPO_VEHICULOBindingSource1.ResetBindings(true);
                }
                else
                {
                    pRODUCTO_TIPO_VEHICULOBindingSource1.DataSource = _tipovehiculo.PRODUCTO_TIPO_VEHICULO;
                    pRODUCTO_TIPO_VEHICULOBindingSource1.ResetBindings(true);
                    tIPO_VEHICULOBindingSource.ResetBindings(true);
                    eMPRESABindingSource.ResetBindings(true);
                }
                
            }
        }

        private void BtnBuscarProductoAsignado_Click(object sender, EventArgs e)
        {
            var _servicio= sERVICIOPROGRAMADOBindingSource.Current as SERVICIO_PROGRAMADO;

            if (_servicio.CARTERASERVICIOPROGRAMADO!= null)
            {
                if (TxtCriterioProductoAsignado.Text != string.Empty)
                {
                    var existe = _servicio.CARTERASERVICIOPROGRAMADO.Where(dv => dv.PRODUCTO_TIPO_VEHICULO.PRODUCTO.Descripcion.ToUpper().Contains(TxtCriterioProductoAsignado.Text.ToUpper())).ToList();
                    cARTERASERVICIOPROGRAMADOBindingSource.DataSource = existe;
                }
                else
                {
                    cARTERASERVICIOPROGRAMADOBindingSource.DataSource = _servicio.CARTERASERVICIOPROGRAMADO;
                    eMPRESABindingSource.ResetBindings(true);
                }
            }
          

        }

        private void sERVICIOPROGRAMADOBindingSource_CurrentChanged(object sender, EventArgs e)
        {
            var _servicio = sERVICIOPROGRAMADOBindingSource.Current as SERVICIO_PROGRAMADO;

            if (_servicio != null)
            {
                cARTERASERVICIOPROGRAMADOBindingSource.DataSource = _servicio.CARTERASERVICIOPROGRAMADO;
            }
        }

        private void TxtCriterioProductoAsignado_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                var _servicio= sERVICIOPROGRAMADOBindingSource.Current as SERVICIO_PROGRAMADO;

                if (_servicio.CARTERASERVICIOPROGRAMADO!= null)
                {
                    if (TxtCriterioProductoAsignado.Text != string.Empty)
                    {
                        var existe = _servicio.CARTERASERVICIOPROGRAMADO.Where(dv => dv.PRODUCTO_TIPO_VEHICULO.PRODUCTO.Descripcion.ToUpper().Contains(TxtCriterioProductoAsignado.Text.ToUpper())).ToList();
                        cARTERASERVICIOPROGRAMADOBindingSource.DataSource = existe;
                    }
                    else
                    {
                        cARTERASERVICIOPROGRAMADOBindingSource.DataSource = _servicio.CARTERASERVICIOPROGRAMADO;
                        eMPRESABindingSource.ResetBindings(true);
                    }
                }
            }
        }

        private void TxtCriterioServicios_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                 var _tipovehiculo = tIPO_VEHICULOBindingSource.Current as TIPO_VEHICULO;

                if (_tipovehiculo != null)
                {
                    sERVICIOPROGRAMADOBindingSource.DataSource = servicioprogramadobl.GetFromServicioProgramadoByIdTipoVehiculoAndDescripcion(_tipovehiculo.Id,TxtCriterioServicios.Text);
                }
            }
        }

        private void TxtTipoVehiculo_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                var _empresa = eMPRESABindingSource.Current as EMPRESA;

                if (_empresa != null)
                {
                    tIPO_VEHICULOBindingSource.DataSource = tipovehiculobl.GetFromTipoVehiculoByDescripcionAndEmpresaId(TxtTipoVehiculo.Text, _empresa.Id);
                }
            }
        }

        private void txtCriterio_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                eMPRESABindingSource.DataSource = empresabl.GetFromEmpresaByDescripcion(txtCriterio.Text);
            }
        }

        private void TxtCriterioCartera_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                var _tipovehiculo = tIPO_VEHICULOBindingSource.Current as TIPO_VEHICULO;
                if (_tipovehiculo != null)
                {
                    if (TxtCriterioCartera.Text != string.Empty)
                    {
                        var existe = _tipovehiculo.PRODUCTO_TIPO_VEHICULO.Where(dv => dv.PRODUCTO.Descripcion.ToUpper().Contains(TxtCriterioCartera.Text.ToUpper())).ToList();
                        pRODUCTO_TIPO_VEHICULOBindingSource1.DataSource = existe;
                        pRODUCTO_TIPO_VEHICULOBindingSource1.ResetBindings(true);
                    }
                    else
                    {
                        pRODUCTO_TIPO_VEHICULOBindingSource1.DataSource = _tipovehiculo.PRODUCTO_TIPO_VEHICULO;
                        pRODUCTO_TIPO_VEHICULOBindingSource1.ResetBindings(true);
                        tIPO_VEHICULOBindingSource.ResetBindings(true);
                        eMPRESABindingSource.ResetBindings(true);
                    }

                }
            }
        }

        private void pRODUCTO_TIPO_VEHICULOBindingSource_CurrentChanged(object sender, EventArgs e)
        {
            var _tipovehiculo = tIPO_VEHICULOBindingSource.Current as TIPO_VEHICULO;
            if (_tipovehiculo != null)
            {
                pRODUCTO_TIPO_VEHICULOBindingSource1.DataSource = _tipovehiculo.PRODUCTO_TIPO_VEHICULO;
            }
        }

        private void pRODUCTO_TIPO_VEHICULOBindingSource1_CurrentChanged(object sender, EventArgs e)
        {
            var _tipovehiculo = tIPO_VEHICULOBindingSource.Current as TIPO_VEHICULO;
            if (_tipovehiculo != null)
            {
                pRODUCTO_TIPO_VEHICULOBindingSource1.DataSource = _tipovehiculo.PRODUCTO_TIPO_VEHICULO;
            }
        }
       
    }
}
